import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

public class HashMapDemo {
    //和TreeMap不同，HashMap允许使用null键
    //HashMap的底层是一个哈希桶，使用链地址法来解决哈希冲突，负载因子为0.75，当哈希表中的元素个数/哈希表长度超过负载因子的时候
    //会进行扩容，扩容的时候需要注意重新哈希
    //当列表的容量超过8之后，会进行树化操作，将列表变为红黑树，保诚查询的效率
    //哈希表的初始长度一般都是2的整数倍
    //以下是HashMap的API演示
    public static void main(String[] args) {
        HashMap<Integer,String> hashMap = new HashMap<>();
        hashMap.put(1,"公孙胜");
        hashMap.put(2,"杨志");
        hashMap.put(3,"王英");
        hashMap.put(4,"吕方");
        hashMap.put(6,"孙二娘");

        //get根据键的值从HashMap之中获取值，如果HashMap不包含这个键的话会返回null
        String result = hashMap.get(1);
        System.out.println(result);

        //判断HashMap是否为空
        if (hashMap.isEmpty()) {
            System.out.println("hashMap为空！");
        } else {
            System.out.println("hashMap不为空！");
        }

        //获取HashMap之中元素的个数
        System.out.println("当前hashMap之中有"+hashMap.size()+"个元素");

        //从HashMap之中删除元素
        hashMap.remove(2);

        //entrySet、keySet、values
        for (Map.Entry<Integer, String> entry : hashMap.entrySet()) {
            System.out.println("键="+entry.getKey()+"值="+entry.getValue());
        }

        for (Integer i : hashMap.keySet()) {
            System.out.println("键="+i);
        }

        for (String value : hashMap.values()) {
            System.out.println("值="+value);
        }

        //利用迭代器进行遍历
        Iterator<Map.Entry<Integer, String>> iterator = hashMap.entrySet().iterator();
        while(iterator.hasNext()) {
            System.out.println(iterator.next());
        }
    }
}
